﻿    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BatallaNavalgo
{
    public class Jugador
    {
        private Tablero tablero;
        private int puntaje;
        
        public Jugador(Tablero tablero)
        {
            this.tablero = tablero;
            this.puntaje = 10000;
        }

        public int Puntaje
        {
            get { return this.puntaje;}
        }

        
        public void ColocarDisparo(DisparoConvencional disparo,Tuple<int, int> posicion)
        {
            this.puntaje -= disparo.Costo;
            this.tablero.ColocarDisparo(disparo,posicion);
        }

        public void ColocarDisparo(MinaPuntual mina,Tuple<int, int> posicion)
        {
            this.puntaje -= mina.Costo;
            this.tablero.ColocarDisparo(mina, posicion);
        }

        public void ColocarDisparo(MinaDoble mina, Tuple<int, int> posicion)
        {
            this.puntaje -= mina.Costo;
            this.tablero.ColocarDisparo(mina, posicion);
            int pos_x = posicion.Item1;
            int pos_y = (posicion.Item2) - 1;
            for (int i = 0; i < 9; i++)
            {
                if (pos_y > (posicion.Item2) + 1)
                    pos_y = (posicion.Item2) - 1;
                if (i <= 2)
                    pos_x = posicion.Item1;
                else if (i > 2 & i <= 5)
                    pos_x = (posicion.Item1) + 1;
                else if (i > 5 & i <= 8)
                    pos_x = (posicion.Item1) - 1;
                if (pos_x == posicion.Item1 & pos_y == posicion.Item2)
                    pos_y++;
                else
                {
                    this.tablero.ColocarDisparo(new MinaPuntual(mina.Turno), new Tuple<int, int>(pos_x, pos_y));
                    pos_y++;
                }
            }
        }

        public void ColocarDisparo(MinaTriple mina, Tuple<int, int> posicion)
        {
            this.puntaje -= mina.Costo;
            this.tablero.ColocarDisparo(mina, posicion);
            int pos_x = posicion.Item1;
            int pos_y = (posicion.Item2) - 2;
            for (int i = 0; i < 25; i++)
            {
                if (pos_y > (posicion.Item2) + 2)
                    pos_y = (posicion.Item2) - 2;
                if (i <= 4)
                    pos_x = posicion.Item1;
                else if (i > 4 & i <= 9)
                    pos_x = (posicion.Item1) + 1;
                else if (i > 9 & i <= 14)
                    pos_x = (posicion.Item1) + 2;
                else if (i > 14 & i <= 19)
                    pos_x = (posicion.Item1) - 1;
                else if (i > 19 & i <= 24)
                    pos_x = (posicion.Item1) - 2;
                if (pos_x == posicion.Item1 & pos_y == posicion.Item2)
                    pos_y++;
                else
                {
                    this.tablero.ColocarDisparo(new MinaPuntual(mina.Turno), new Tuple<int, int>(pos_x, pos_y));
                    pos_y++;
                }
            }
        }

        public void ColocarDisparo(MinaPorContacto mina, Tuple<int, int> posicion)
        {
            this.puntaje -= mina.Costo;
            this.tablero.ColocarDisparo(mina, posicion);
        }


        public void JugarTurno()
        {
            this.tablero.RealizarImpactos();
        }

        public void PasarTurno()
        {
            this.tablero.PasarTurno();
            this.puntaje -= 10;
        }
    }
}
